#ifndef ONODE_H
#define ONODE_H

#include "basicoject.h"
#include <OgreSceneNode.h>

class ONode : public BasicObject
{
    Q_OBJECT
    Q_PROPERTY(QString parentNodeId READ parentNodeId WRITE setParentNodeId);

    Q_PROPERTY(float xPos READ xPos WRITE setXPos);
    Q_PROPERTY(float yPos READ yPos WRITE setYPos);
    Q_PROPERTY(float zPos READ zPos WRITE setZPos);

    Q_PROPERTY(float xScale READ xScale WRITE setXScale);
    Q_PROPERTY(float yScale READ yScale WRITE setYScale);
    Q_PROPERTY(float zScale READ zScale WRITE setZScale);

    Q_PROPERTY(float xAng READ xAng WRITE setXAng);
    Q_PROPERTY(float yAng READ yAng WRITE setYAng);
    Q_PROPERTY(float zAng READ zAng WRITE setZAng);

public:
    explicit ONode(QObject *parent = 0);

    QString parentNodeId() const;

    void setNode(Ogre::SceneNode* node);

    void setParentNodeId(const QString& id);

    ObjectType type() {
        return NODE;
    }

    // ---- positon

    float xPos() const ;

    void setXPos(float pos);

    float yPos() const;

    void setYPos(float pos);

    float zPos() const ;

    void setZPos(float pos);

    // ---- scale

    float xScale() const ;

    void setXScale(float scale);

    float yScale() const;

    void setYScale(float scale);

    float zScale() const ;

    void setZScale(float scale);

    // ---- rotation

    float xAng() const ;

    void setXAng(float ang);

    float yAng() const;

    void setYAng(float ang);

    float zAng() const ;

    void setZAng(float ang);


signals:

public slots:

protected:
    void updatePos();
    void updateScale();

    QString m_parentNodeID;
    float m_xPos;
    float m_yPos;
    float m_zPos;

    float m_xScale;
    float m_yScale;
    float m_zScale;

    float m_xAng;
    float m_yAng;
    float m_zAng;

    Ogre::SceneNode* m_node;

};

#endif // ONODE_H
